Фермер Джон упорядочил n своих коров, каждая из которых относится к одной из
двух пород: Holsteins или Guernseys. Он
зафиксировал этот порядок в виде строки из символов, каждый из
которых равен либо
H, либо G соответственно. Однако, к несчастью, когда коровы
прибыли на ферму и Джон снова выстроил их в ряд, получившаяся строка оказалась
отличной от исходной.
Обозначим эти две строки через a и b, где a – исходная
строка, которую Фермер Джон хотел увидеть, а b – строка,
получившаяся после прибытия коров. Фермер Джон обратился за помощью к своему
кузену Бену.
После нескольких месяцев работы Бен создал
удивительную машину MCBF-3000, которая умеет выбирать любую подстроку и
заменять в ней все символы G на H, а все символы H – на G. Теперь
Фермер Джон хочет узнать минимальное количество применений этой машины,
необходимое для преобразования строки b в строку a. Помогите Фермеру Джону решить эту задачу.
Вход. В
первой строке задано целое число n (1 ≤ n ≤ 1000)
– количество коров. Далее следуют строки a и b. Каждая
из них состоит только из символов H и G.
Выход. Выведите
минимальное количество применений машины MCBF-3000, необходимое для
преобразования строки b в строку a.
|
Пример входа |
Пример выхода |
|
7 GHHHGHH HHGGGHH |
2 |
жадность
Анализ алгоритма

Пример
Для заданного примера существует два непересекающихся интервала, на
которых необходимо применить машину MCBF-3000.

cin >> n >> a >> b;
В переменной cnt храним длину текущего
интервала несовпадений. В переменной res
накапливаем ответ – количество
применений машины.
res = cnt = 0;
Последовательно обрабатываем символы строк.
for (i = 0; i < n; i++)
Если ai ≠ bi, увеличиваем cnt на единицу.
if (a[i] != b[i])
cnt++;
В противном случае (если ai
= bi), текущий
интервал несовпадений завершается: сбрасываем cnt в ноль и увеличиваем
счётчик интервалов res на единицу.
else
{
if (cnt > 0) res++;
cnt = 0;
}
Если cnt > 0, это означает, что в конце строки остался незавершённый
интервал несовпадений, для которого также необходимо совершить одно применение
машины.
if (cnt > 0) res++;
Выводим ответ.
cout << res << endl;
Читаем входные данные.
n = int(input())
a = input()
b = input()
В переменной cnt
храним длину текущего интервала несовпадений. В переменной res накапливаем ответ – количество применений машины.
res = cnt = 0
Последовательно
обрабатываем символы строк.
for i in range(n):
Если ai ≠ bi, увеличиваем cnt на единицу.
if a[i] != b[i]: cnt += 1
В противном случае
(если ai = bi), текущий интервал несовпадений завершается:
сбрасываем cnt в ноль и увеличиваем счётчик интервалов res на
единицу.
else:
if cnt > 0: res += 1
cnt = 0
Если cnt > 0, это означает, что в конце строки остался незавершённый
интервал несовпадений, для которого также необходимо совершить одно применение
машины.
if cnt > 0: res += 1
Выводим ответ.
print(res)